package test08.t02;

import java.util.Optional;
import java.util.Random;

/**
 * 如果Optional为空返回指定的默认值
 * orElse 、ofNullable、orElseThrow
 * @Author lzp
 * @Date 2024-04-12
 */
public class Test02 {
    public static void main(String[] args) {
        //第一 创建一个 Optional对象
        Optional<String> optional = Optional.ofNullable(null);

        //使用相关的API对象
        //orElse() - 如果Optional为空返回指定的默认值
        String s = optional.orElse("HaHa");
        System.out.println(s);

        //ofNullable() - 如果 Optional 实例存在值，则返回相应的值，否则执行指定的Supplier函数并返回其结果
        Optional<Integer> optional1 = Optional.ofNullable(null);
        //T get();  orElseGet
        Integer d = optional1.orElseGet(() -> {
            // ...... 此处可以经过一系列操作后，返回一个具体的数据 - orElse做不到
            return new Random().nextInt(100);
        });
        System.out.println(d);


        //orElseThrow() 如果Optional为 null 返回一个异常
        optional.orElseThrow(()->{
            return new RuntimeException("Optional 封装的数据为空！");
        });


        // 第一：创建 Optional 对象
        Optional<String> opt = Optional.ofNullable("hello");
        // 第二：使用相关的 API 方法，实现相关的操作
        // Function<T, R> - 把 T 类型数据 转换为 R类型的数据，
        // 当然也可以转换相同类型的数据
        // R apply(T t) - 把小写字符串 转换为 大写字符串
        String str = opt.map(String::toUpperCase).orElse("空");
        System.out.println(str);


    }
}
